﻿#define _CRT_SECURE_NO_WARNINGS
//#include<iostream>
//#include<algorithm>
//
//using namespace std;
//int main()
//{
//	int arr[10];
//	for (int i = 0; i < 10; i++)
//	{
//		cin >> arr[i];
//	}
//	//从小到大
//	sort(arr, arr + 10);
//	for (int i = 0; i < 10; i++)
//	{
//		cout << arr[i];
//	}
//	cout << endl;
//	//从大到小
//	sort(arr, arr + 10, greater<int>());
//	for (int i = 0; i < 10; i++)
//	{
//		cout << arr[i];
//	}
//	cout << endl;
//
//	return 0;
//}

//#include<iostream>
//#include<algorithm>
//#include<stdio.h>
//using namespace std;
//
//int score[35];
//int main()
//{
//	int N, K, sum;
//	scanf("%d", &N);
//	for (int i = 0; i < N; i++)
//	{
//		scanf("%d", &score[i]);
//	}
//	scanf("%d", &K);
//	sort(score, score + N, greater<int>());
//	sum = 0;
//	for (int i = 0; i < K; i++)
//	{
//		sum += score[i];
//	}
//	printf("%.2f\n", 1.0 * sum / K);
//	
//	return 0;
//}


//#include<stdio.h>
//#include<stdlib.h>
//
//int main()
//{
//	//开辟动态内存
//	int* p = (int*)calloc(10, sizeof(int));
//	if (p == NULL)
//	{
//		perror("calloc");
//		return 1;
//	}
//	//放数据
//	/*for (int i = 0; i < 10; i++)
//	{
//		p[i] = i + 1;
//	}*/
//	//如果不放数据，calloc也会将内存初始化为0.
//
//	//内存不够，扩大
//	int* ptr = (int*)realloc(p, 20 * sizeof(int));
//	if (ptr == NULL)
//	{
//		perror("realloc");
//		return 1;
//	}
//	else
//	{
//		p = ptr;
//		ptr = NULL;
//	}
//	//
//	for (int i = 0; i < 20; i++)
//	{
//		p[i] = i + 1;
//	}
//	//读数据
//	for (int i = 0; i < 20; i++)
//	{
//		printf("%d ", p[i]);
//	}
//	printf("\n");
//	//内存调小
//	ptr = (int*)realloc(p, 5 * sizeof(int));
//	if (ptr == NULL)
//	{
//		perror("realloc");
//		return 1;
//	}
//	else
//	{
//		p = ptr;
//		ptr = NULL;
//	}
//	//
//	for (int i = 0; i < 5; i++)
//	{
//		printf("%d ", p[i]);
//	}
//	//释放
//	free(p);
//	p = NULL;
//
//	return 0;
//}

//void GetMemory(char* p)
//{
//	p = (char*)malloc(100);
//}
//
//void Test(void)
//{
//	char* str = NULL;
//	GetMemory(str);
//	strcpy(str, "hello world");
//	printf(str);
//}

//#include<stdio.h>
//struct S
//{
//	int a;
//	char arr[0];
//}s;
//int main()
//{
//	printf("%d\n", sizeof(s));
//	return 0;
//}

//#include<stdio.h>
//
//char* GetMemory(void)
//{
//	char p[] = "hello world";
//	return p;
//}
//void Test(void)
//{
//	char* str = NULL;
//	str = GetMemory();
//	printf(str);
//}
//
//int main()
//{
//	Test();
//
//	return 0;
//}

//#include<stdio.h>
//#include<stdlib.h>
//
//int main()
//{
//	int a = atoi("-4 5");
//	printf("%d\n", a);
//
//	return 0;
//}

#include <stdlib.h>
#include <assert.h>
#include <ctype.h>
#include<stdio.h>
//空指针
//""
//空白字符
//+/-
//溢出
enum State
{
	VALID,
	INVALID
}state = INVALID;
//默认表示非法

int my_atoi(const char* str)
{
	//非空字符NULL
	assert(str);
	//非"";
	if (*str == '\0')
	{
		return 0;
	}
	//跳过空白字符
	while (isspace(*str))
	{
		str++;
	}
	int flag = 1;
	if (*str == '+')
	{
		str++;
	}
	else if (*str == '-')
	{
		flag = -1;
		str++;
	}
	long long ret = 0;
	while (*str)
	{
		if (isdigit(*str))
		{
			ret = ret * 10 + (flag * (*str - '0'));
			if (ret > INT_MAX)
			{
				return INT_MAX;
			}
			else if (ret < INT_MIN)
			{
				return INT_MIN;
			}
		}
		else
		{
			return (int)ret;
		}
		str++;
	}

	state = VALID;
	return (int)ret;
}

int main()
{
	int ret = my_atoi("#");

	if (state == VALID)
		printf("%d\n", ret);
	else
		printf("非法字符串转换,%d\n", ret);

	return 0;
}


//int main()
//{
//    long num = 0;
//    FILE* fp = NULL;
//    if ((fp = fopen("fname.dat", "r")) == NULL)
//    {
//        printf("Can’t open the file!");
//        exit(0);
//    }
//    while (fgetc(fp) != EOF)
//    {
//        num++;
//    }
//    printf("num=%d\n", num);
//    fclose(fp);
//    return 0;
//}
//#include <stdio.h>
//typedef union
//{
//	int a;
//	struct
//	{
//		short b;// 00100000 00010101 00001000 00010000
//		short c;
//	};
//}X;
//int main()
//{
//	X x;
//	x.a = 0x20150810;
//	printf("%x,%x\n", x.b, x.c);
//	return 0;
//}

//#deﬁne MAX 255
//int main()
//{
//	unsigned char A[255];
//	unsigned char i;
//	for (i = 0; i <= 255; i++)
//		A[i] = i;
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	unsigned char i = 7;
//	int j = 0;
//	for (i=7; i > 0; i=i-3)
//	{
//		++j;
//	}
//	printf("%d\n", j);
//	return 0;
//}

 